#ifndef __QUEUE_H__
#define __QUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include "shm.h"
#include <string.h>

// 基于共享内存的环形队列

#define SEM_EMPTY_ID 0
#define SEM_FULL_ID 1
#define SEM_MUTEX_ID 2

/**
typedef struct person
{
    int age;
    char name[32];
} person_t;
**/

typedef struct
{
    int rpos;   // 读位置
    int wpos;   // 写位置
    int bloksz; // 数据块大小
    int blocks; // 数据块个数
    int semid;  // 信号量集合ID
} shm_head_t;

typedef struct
{
    shm_head_t *phead;
    char *p_playload;
} shm_fifo_t;

shm_fifo_t *shm_fifo_init(int blocks, int blksz);

void shm_fifo_destroy(shm_fifo_t *p_shm_fifo, int shmid);

void shm_fifo_write(shm_fifo_t *pfifo, void *buf);

// 队列读数据
void shm_fifo_read(shm_fifo_t *pfifo, void *buf);

#endif